文章目录 1. Springmvc中的转发重定向和拦截器1.1. 可变参数1.2. 转发和重定向1.2.1. forward:1.2.2. redirect:1.2.3. 实例1.3. 拦截器1.3.1. 基本概念1.4. 使用拦截器1.4.1. 自定义拦截器类1.4.2. 在springmvc的配置文件中配置1.4.2.1. 配置1.5. 其中实现的方法1.5.1. 演示登录检查1.5.1.1. 自定义拦截器(LoginInterceptor)1.5.1.2. springmvc中配置拦截器1.6. 多个拦截器的执行顺序1.7. 拦截器和过滤器的区别(主要的区别)1.8. 总结Springmvc中的转发重定向和拦截器可变参数 可变参数在设计方法时,使用数据类型...来声明参数类型,例如:public static void function(int... numbers)
在实现方法体时,可变参数是作为数组来处理
代码语言:javascript复制public class Test {
public static void main(String[] args) {
System.out.println(Test.sum(1,2,3));
System.out.println(Test.sum(1,2,3,4,54));
}
public static int sum(int... numbers){
int sum=0;
for(int i=0;i
其中实现的方法public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler)该方法在controller处理请求之前执行如果返回的false,则会中断处理流程,不会执行后续的拦截器和处理器,返回true会执行后续的拦截器和处理器可以自行设计逻辑返回false或者truepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView)处理器执行之后,视图处理之前调用,此时可以通过对ModelAndView对数据和视图进行处理当然需要prehandler方法返回true才会执行public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)所有的请求处理完毕之后调用,比如性能监控中,我们可以在此记录结束时间和消耗时间,还可以进行一些资源处理当然需要prehandler方法返回true才会执行演示登录检查登录检查: 当涉及到用户信息的修改,查看什么的,必须要验证是否登录,因此需要设计拦截器验证登录先设定登录数据,即: 在login.jsp中添加登录按钮,登录完成之后,需要自己定义一个标记存储在session中,比如用户的id或者用户的对象我们使用用户的id作为标记验证是否已经的登录,如果用户登录成功,会在session中添加一个uid的属性用户退出登录使用session.invalidate();清除session,并且重定向到登录界面自定义拦截器(LoginInterceptor)具体流程在prehandler方法中写的很清楚代码语言:javascript复制public class LoginInterceptor implements HandlerInterceptor{
/*
* 在处理器执行之前调用(non-Javadoc)
* 1. 获取session
* 2. 读取session中的uid的值
* 如果为null,表示没有登录,那么直接重定向到登录界面,同时返回false,不需要执行后面的流程了
* 如果不为null,表示已经登录了,那么直接返回true,继续执行后面的拦截器或者处理器
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HttpSession session=request.getSession(); //获取session
Object uid=session.getAttribute("uid"); //读取session中的对象
//如果uid存在,那么即可登录完成
if (uid!=null) {
return true; //返回true,登录成功就需要执行后续的流程
}
response.sendRedirect(request.getContextPath()+"/user/login.do"); //重定向到登录界面
return false; //返回false,后面的流程也不用执行了,直接中断
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}springmvc中配置拦截器由于这里只是跳转到用户中心需要验证登录,那么只是匹配了user_center.do代码语言:javascript复制
多个拦截器的执行顺序根据在springmvc配置文件中配置的顺序执行,即是在下配置的拦截器的顺序,如果对同一个路径进行了拦截器,那么先配置的先拦截拦截器和过滤器的区别(主要的区别)拦截器是springmvc中,仅仅当使用springmvc才可以使用拦截器,过滤器是Java EE体系中的,无论使用哪种框架都可以使用过滤器拦截器在DispatcherServlet之后,在处理器之前执行,过滤器在DispatcherServlet之前执行过滤器会在所有的servlet之前执行(所有的请求都会执行),而拦截器会在springmvc中DispatcherServlet之后执行,所以过滤器在项目中可以过滤任何请求(只要是配置了对应的路径),而拦截器只会在DispatcherServlet处理的请求的基础之上进行拦截总结当多种请求都需要做相同或者极为相似的任务时,可以使用拦截器开发好拦截器,那么需要在springmvc的配置文件中配置在可以有如果若干个,即是配置若干个拦截器,配置的多个拦截器将会形成拦截器链,如果配置多个拦截器对同一个路径都会拦截,那么会按照配置的节点顺序执行。
|